#ifndef __CAPACONSULTA_PARSEADORCOMANDOS_H
#define __CAPACONSULTA_PARSEADORCOMANDOS_H

/*****************************************************************************
*                     Organizacion de Datos - 75.06                          *
*                         Catedra Lic. Servetto                              *
*            Facultad de Ingenieria - Universidad de Buenos Aires            *
******************************************************************************/

#include "AdministradorDeOperaciones.h"
#include "AdministradorMetadata.h"

#include <list>
#include <string>
#include <map>

using namespace Comun;
using namespace std;

namespace CapaConsulta
{

	class ParseadorComandos
	{
		
		public:
		
		static Operacion* ParsearSeleccion(list<string>* operacion, int numeroOperacion);
		static Operacion* ParsearInsercion(list<string>* operacion);
		static Operacion* ParsearActualizacion(list<string>* operacion);
		static Operacion* ParsearBorrado(list<string>* operacion);
		static Operacion* ParsearCreacion(list<string>* operacion);
		static Operacion* ParsearEjecucion(list<string>* operacion);
		
		private:
		
		static void SacarConComprobacion(list<string>* operacion, string nombreOperacion);
		static bool ValidarDatosEntreComillasSimples(string dato);
		static string EliminarComillasSimplesDeDatos(string dato);
		static string BuscarNombreClase(string nombreAtributoConClase);
		static string BuscarNombreAtributo(string nombreAtributoConClase);
		static bool ValidarNombreAtributoConClase(string nombreAtributoConClase);
		static CondicionCompuesta* ParsearWhere(string nombreOperacion, list<string>* operacion, map<string, AdministradorMetadata*> administradores, bool atributosConPunto, bool esperaProxima = false, string proximaSentencia = "AND");
		static Condicion* ParsearCondicion(list<string>* operacion, map<string, AdministradorMetadata*> administradores, bool atributosConPunto);
		
	};

}

#endif
